#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include "list.h" // 请不要删除，否则检查不通过
//本题有三个注意事项
//1. 题目出栈顺序为y,x,操作顺序为x op y
//2. 使用Stack S,而非Stack *S,否则出现野指针,可能不通过
//3. pop为函数,切勿赋值操作,如int x=pop(&S,&m)错误
int compute_reverse_polish_notation(char *str){
    Stack S;
    init_stack(&S);
    int len=(int)strlen(str);
    for(int i=0;i<len;i++){
        if(str[i]==' '){
            continue;
        }else if(str[i]>='0'&&str[i]<='9'){
            int k=0;
            while(str[i]!=' '&&i<len){
                k=k*10+(str[i]-'0');
                i++;
            }
            push(&S,k);
            i--;
        }else{
            int n,m;
            pop(&S,&n);
            pop(&S,&m);
            if(str[i]=='+'){
                push(&S,m+n);
            }else if(str[i]=='-'){
                push(&S,m-n);
            }else if(str[i]=='*'){
                push(&S,m*n);
            }else if(str[i]=='/'){
                push(&S,m/n);
            }else if(str[i]=='%'){
                push(&S,m%n);
            }
        }
    }
    int p;
    pop(&S,&p);
    return p;
}